/**
 * Odontosis - (2008 - Eclipse 3.3 - JDK1.6 Update 3)
 
 */
package com.odontosis.entidade;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Range;


/**
 * Business Object de Servio.
 * @author Oto.
 * ltima modificao: $Author$<br>
 * Verso: $Revision$ $Date$
 */
@Entity
@Table(name = "servico")
public class Servico extends OdontosisBusinessObject {
	private static final long serialVersionUID = 8511770493160446221L;
	
	@Length(min=0, max=30)
	private String descricao; 
	
	@NotNull
	private BigDecimal valor;

	private Integer quantidadeParcelas;
	
	@NotNull
	@Column(name = "tipo")
	private TipoServico tipoServico;
	
	@Range(min=1,max=12)
	private Integer mesVencimentoPrimeiraParcela;
	
	@Range(min=1,max=9999)
	private Integer anoVencimentoPrimeiraParcela;
	
	@NotNull
	@ManyToOne
	@JoinColumn(name = "paciente")
	private Paciente pacienteServico;
	
	
	@Column(name = "valorInicial")
	private String valorInicial;

	@Column(name = "quantidadeInicial")
	private String quantidadeInicial;

	@OneToMany(fetch = FetchType.LAZY)
	//@Cascade(value = CascadeType.ALL)
	@JoinColumn(name = "servico")
	private List<Pagamento> listaPagamentos;
	
	@NotNull
	@Column(name = "data_cadastro")
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataCadastro ;
	
	@Column(name = "mesIsencao")
	private Integer mesIsencao;
	
	@Column(name = "anoIsencao")
	private Integer anoIsencao;

	private boolean pago;
	
	private boolean isento;
	
	@Column(name = "orcamento")
	private boolean orcamento;
	
	@Column(name = "convenio")
	private String convenio;
	
	@Column(name = "data_cancelado")
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataCancelamento;
	
	@Column(name = "status")
	private StatusServico statusServico;
	
	public Integer getMesIsencao() {
		return mesIsencao;
	}

	public Integer getAnoIsencao() {
		return anoIsencao;
	}

	public void setMesIsencao(Integer mesIsencao) {
		this.mesIsencao = mesIsencao;
	}

	public void setAnoIsencao(Integer anoIsencao) {
		this.anoIsencao = anoIsencao;
	}

	/**
	 * @return the valor
	 */
	public BigDecimal getValor() {
		return valor;
	}

	/**
	 * @param valor the valor to set
	 */
	public void setValor(BigDecimal valor) {
		this.valor = valor;
	}

	
	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	/**
	 * @return the quantidadeParcelas
	 */
	public Integer getQuantidadeParcelas() {
		return quantidadeParcelas;
	}

	/**
	 * @param quantidadeParcelas the quantidadeParcelas to set
	 */
	public void setQuantidadeParcelas(Integer quantidadeParcelas) {
		this.quantidadeParcelas = quantidadeParcelas;
	}

	/**
	 * @return the tipoServico
	 */
	public TipoServico getTipoServico() {
		return tipoServico;
	}

	/**
	 * @param tipoServico the tipoServico to set
	 */
	public void setTipoServico(TipoServico tipo) {
		this.tipoServico = tipo;
	}

	/**
	 * @return the mesVencimentoPrimeiraParcela
	 */
	public Integer getMesVencimentoPrimeiraParcela() {
		return mesVencimentoPrimeiraParcela;
	}

	/**
	 * @param mesVencimentoPrimeiraParcela the mesVencimentoPrimeiraParcela to set
	 */
	public void setMesVencimentoPrimeiraParcela(Integer mesVencimentoPrimeiraParcela) {
		this.mesVencimentoPrimeiraParcela = mesVencimentoPrimeiraParcela;
	}

	/**
	 * @return the anoVencimentoPrimeiraParcela
	 */
	public Integer getAnoVencimentoPrimeiraParcela() {
		return anoVencimentoPrimeiraParcela;
	}

	/**
	 * @param anoVencimentoPrimeiraParcela the anoVencimentoPrimeiraParcela to set
	 */
	public void setAnoVencimentoPrimeiraParcela(Integer anoVencimentoPrimeira) {
		this.anoVencimentoPrimeiraParcela = anoVencimentoPrimeira;
	}

	/**
	 * @return the pacienteServico
	 */
	public Paciente getPacienteServico() {
		return pacienteServico;
	}

	/**
	 * @param pacienteServico the pacienteServico to set
	 */
	public void setPacienteServico(Paciente paciente) {
		this.pacienteServico = paciente;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public boolean isPago() {
		return pago;
	}

	public void setPago(boolean pago) {
		this.pago = pago;
	}

	public String getValorInicial() {
		return valorInicial;
	}

	public void setValorInicial(String valorInicial) {
		this.valorInicial = valorInicial;
	}

	public String getQuantidadeInicial() {
		return quantidadeInicial;
	}

	public void setQuantidadeInicial(String quantidadeInicial) {
		this.quantidadeInicial = quantidadeInicial;
	}

	public List<Pagamento> getListaPagamentos() {
		return listaPagamentos;
	}

	public void setListaPagamentos(List<Pagamento> listaPagamentos) {
		this.listaPagamentos = listaPagamentos;
	}

	public boolean isIsento() {
		return isento;
	}

	public void setIsento(boolean isento) {
		this.isento = isento;
	}

	public boolean isOrcamento() {
		return orcamento;
	}

	public void setOrcamento(boolean orcamento) {
		this.orcamento = orcamento;
	}

	public String getConvenio() {
		return convenio;
	}

	public void setConvenio(String convenio) {
		this.convenio = convenio;
	}

	public Date getDataCancelamento() {
		return dataCancelamento;
	}

	public void setDataCancelamento(Date dataCancelamento) {
		this.dataCancelamento = dataCancelamento;
	}

	public StatusServico getStatusServico() {
		return statusServico;
	}

	public void setStatusServico(StatusServico status) {
		this.statusServico = status;
	}
	
	
}
